import { Base } from '../../utils/Base.js';
class Cart extends Base {
  constructor() {
    super();
    this._storageKeyName='cart';//购物车缓存key
  }
   /*
    * 加入到购物车
    * 如果之前没有样的商品，则直接添加一条新的记录， 数量为 counts
    * 如果有，则只将相应数量 + counts
    * @params:
    * item - {obj} 商品对象,
    * counts - {int} 商品数目,
    * */
  add(item,counts){
    var cartData = this.getCartDataFromLocal();
    
    //检查数据中是否已存在该商品
    var isHasInfo = this._isHasThatOne(item.id,cartData);   
    //console.log(item);
    if(isHasInfo.index == -1){
      //不存在该商品，将商品加入导购物车
      item.counts = counts;
      item.selectStatus = true;  //默认在购物车中为选中状态
      cartData.push(item);
      //console.log(cartData);
    }else{
      //已存在该商品，更新商品数量
      cartData[isHasInfo.index].counts += counts;
    }
    this.execSetStorageSync(cartData);  //更新本地缓存
    return cartData;
  }
  /*本地缓存 保存／更新*/
  execSetStorageSync(data) {
    wx.setStorageSync(this._storageKeyName, data);
  };
  //获取缓存中购物车数据
  getCartDataFromLocal(flag){
    var data = wx.getStorageSync(this._storageKeyName);
    if(!data){
      return [];
    }
    //如果flag为true，则过滤掉没有选中的商品
    if(flag){
      var newData = [];
      for(let i=0;i<data.length;i++){
        if(data[i].selectStatus){
          newData.push(data[i]);
        }
      }
      data = newData;
    }
    return data;
  }

  /**
   * 1判断购物车中是否已存在指定id商品数据
   * 2返回已存在的商品id
   */
  _isHasThatOne(id,arr){
    var item,
        result = {index:-1};
    for (let i = 0; i < arr.length; i++) {
      item = arr[i];
      if (item.id == id) {
        result = {
          index: i,
          data: item
        };
        break;
      }
    }
    return result;
  }
  /*获取购物车商品总数量*/
  getCartTotalCounts(flag){
    var data = this.getCartDataFromLocal();
    var counts=0;
    for(let i=0;i<data.length;i++){
      if(flag){
        //计算出选中状态的商品数量
        if(data[i].selectSatatus){
          counts += data[i].counts;
        }
      }else{
        counts += data[i].counts;
      } 
    }
    return counts;
  }

  /*
  * 修改商品数目
  * params:
  * id - {int} 商品id
  * counts -{int} 数目
  * */
  _changeCounts(id, counts) {
    var cartData = this.getCartDataFromLocal(),
      hasInfo = this._isHasThatOne(id,cartData);
    if(hasInfo.index != -1){
      if(hasInfo.data.counts>1){
        cartData[hasInfo.index].counts += counts;
      }
    }
    //更新本地缓存
    this.execSetStorageSync(cartData);  
  }
  /**
   * 添加商品数量
   */
  addCounts(id){
    this._changeCounts(id,1);
  }
  /**
   * 减少商品数量
   */
  cutCounts(id) {
    this._changeCounts(id, -1);
  }
  /**
   * 删除商品
   */
  delete(ids){
    //如果不是数组，则只删除单个id
    if(!(ids instanceof Array)){
      ids = [ids];
    }
    var cartData = this.getCartDataFromLocal();
    for(let i=0;i<ids.length;i++){
      var hasInfo = this._isHasThatOne(ids[i], cartData);
      if(hasInfo.index != -1){
        cartData.splice(hasInfo.index,1);
      }
    }
    //更新本地缓存
    this.execSetStorageSync(cartData);  
  }
}
export {Cart};